﻿//using LuckyControl.ShapeControls;
//using System;
//using System.Collections.Generic;
//using System.Drawing;
//using System.Drawing.Drawing2D;
//using System.Windows.Forms;

//namespace HMaker.Controls
//{
//    /// <summary>
//    /// 平行四边形形状控件
//    /// </summary>
//    public class ShapeParallelogram : ShapeControl
//    {
//        #region 图形的详细绘制参数
//        /// <summary>
//        /// 平行四边形的底的一半
//        /// </summary>
//        private int _A = 0;

//        /// <summary>
//        /// 平行四边形左上角的顶角的角度
//        /// </summary>
//        private int _Angle = 45;

//        /// <summary>
//        /// 平行四边形的左上角的顶角的弧度
//        /// </summary>
//        private double __Angle = 45 / 180.0 * Math.PI;

//        /// <summary>
//        /// 读取或设置平行四边形第一个顶角的角度
//        /// </summary>
//        public int Angle
//        {
//            get => _Angle;
//            set
//            {
//                if (value <= 0 || value >= 180)
//                {
//                    throw new ArgumentOutOfRangeException("平行四边形的顶角角度必须为0~180°(不包含端点值)");
//                }
//                _Angle = value;
//                __Angle = _Angle / 180.0 * Math.PI;
//                UpdateParam();
//            }
//        }


//        public Point[] Vertex { get; private set; } = new Point[4];

//        protected override void UpdateParam()
//        {
//            _A = Math.Abs(Width / 2 - Math.Abs((int)(Height / 2 / Math.Tan(__Angle))));
//            if (_A == 0)
//            {
//                _A = 1;
//            }

//            int _x = _Angle == 90 ? 0 : (int)(Height / 2 / Math.Tan(__Angle));
//            int _dx = Width / 2 - (_A + Math.Abs(_x));

//            //更新位置和大小(保持中心点不变)
//            Left += _dx;
//            Width += -_dx * 2;

//            int w2 = Width / 2;
//            Vertex[0] = new Point(w2 - _A - _x, 0);
//            Vertex[1] = new Point(w2 + _A - _x, 0);
//            Vertex[2] = new Point(w2 + _A + _x, Height);
//            Vertex[3] = new Point(w2 - _A + _x, Height);
//            Invalidate();
//        }


//        public override KeyValuePair<string, string> ShapeDescription => new KeyValuePair<string, string>("SHAPEPARALLELOGRAM", $"{Common.MakeString(IsBound ? RelativeCenterPos : CenterPos)},{_A},{Height},{_Angle}");


//        #endregion

//        public ShapeParallelogram(OriginPos origin = null) : base(origin)
//        {
//            Size = new Size(50, 100);
//            Location = Point.Empty;
//        }

//        public ShapeParallelogram(Point centerPoint, int w, int h, int angle, OriginPos origin = null) : base(origin)
//        {
//            Angle = angle;
//            int h2 = h / 2;
//            int w2 = w / 2 + (int)(h2 / Math.Tan(__Angle));
//            //Size = new Size(w2 * 2, h2 * 2);
//            //centerPoint.Offset(-w2, -h2);
//            //Location = centerPoint;
//            CenterPos = centerPoint;
//        }

//        public ShapeParallelogram(Rectangle rect, OriginPos origin = null) : base(origin)
//        {
//            Size = rect.Size;
//            Location = rect.Location;
//        }

//        /// <summary>
//        /// 设置或读取平行四边形的中心点
//        /// 设置中心点时,务必先设置好宽高
//        /// </summary>
//        public override Point CenterPos
//        {
//            set
//            {
//                int h2 = Height / 2;
//                int w2 = Width / 2 + (int)(h2 / Math.Tan(__Angle));
//                Location = new Point(value.X - w2, value.Y - h2);
//            }
//        }


//        protected override void OnPaint(PaintEventArgs e)
//        {
//            GraphicsPath path = new GraphicsPath();
//            path.AddLines(Vertex);
//            e.Graphics.FillPath(ForeBrush, path);
//            base.OnPaint(e);
//        }

//        protected override void OnMouseWheel(MouseEventArgs e)
//        {
//            base.OnMouseWheel(e);
//            try
//            {
//                Angle += e.Delta / 120 * 10;
//            }
//            catch (Exception) { }
//        }

//        protected override GraphicsPath OnDrawRegion()
//        {
//            GraphicsPath path = new GraphicsPath();
//            path.AddLines(Vertex);
//            return path;
//        }

//        public override ShapeControl Clone()
//        {
//            return new ShapeParallelogram(CenterPos, _A * 2, Height, _Angle, OriginPos);
//        }
//    }

//}
